home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / 8bit / cislib_b / snkatk.xmo < prev    next >
Text File  |  1995-04-22  |  15KB  |  1 lines

  1. ; β∈β∮∩τÆ∈∩÷ÕŒÆ≡τøøÆ°≤¢; Sneak Attack by David Plotkin¢¢MODULE¢¢BYTE¢  ChrBase=756,Max,Bkgrnd=710,¢  Fate=53770,Level=[1],CursIn=752,¢  Stick=632,Ps,Loud=[0],Indx=[0],¢  DownL=[0],DownR=[0],Loud1=[0],¢  Snd1=$D208,Snd2=$D20F,Freq=[169],¢  Wsync=$D40A,Colbk=$D018,¢  Nmien=$D40E,Hard=[15],¢  Consol=53279¢¢CARD¢  Scrn=88,RamSet,HiMem=$2E5,¢  Score=[0],Comp=[300],Sdlst=560,¢  Vdslst=512¢¢CARD ARRAY Linept(24)¢¢BYTE ARRAY¢  Charset,Chopperstatus(30),¢  Chopperx(30),Choppery(30),¢  Expx(60),Expy(60),ExpStatus(60),¢  TrStatus(30),Trx(30),Try(30),¢  MisStatus(30),Misx(30),Misy(30),¢  Ll(20),Rr(20),Dlist,¢  ShapeTable(0)=¢    [254  16 124  71 127  12  62   0¢     127   8  62 226 254  24 126   0¢      96  96  48  48  24  60 231 255¢      24  24  24  24  24  60 231 255¢       6   6  12  12  24  60 231 255¢     128  85  17  66  24 170  91 131¢      60 126 255 255 195  66  36  24¢      60  36  24 255  60  24  36 102¢       0   0   0   0   0   0   0   0¢      60  36  24 255  60  24  36 102¢      60  36 219 255  60  24  36 102¢      60  60  24  60  60  24  24  28¢      60  60  24  60  60  60 102 195]¢¢PROC Download()¢;Step back HiMem and move the¢;character set into RAM¢CARD Index¢BYTE Val¢  RamSet=(HiMem-$400)&$FC00¢  ChrBase=RamSet RSH 8¢  HiMem=RamSet¢  FOR Index=0 TO 1023 DO¢    Val=Peek(57344+Index)¢    Poke(RamSet+Index,Val)¢  OD¢  Charset=RamSet¢RETURN¢¢PROC Dlint()¢;the display list interrupt routine¢  [$48 $8A $48 $98 $48]¢  Wsync=1¢  Colbk=50¢  [$68 $A8 $68 $AA $68 $40]¢¢PROC Scoreline()¢;set up the dli¢  Dlist=Sdlst¢  Vdslst=Dlint¢  Dlist(27)=130¢  Nmien=$C0¢RETURN¢¢PROC Update()¢;print score and level¢  Position(1,23)¢  Print("Score: ")¢  Position(8,23)¢  PrintC(Score)¢  Position(18,23)¢  Print("Level: ")¢  Position(25,23)¢  PrintB(Level)¢RETURN¢¢PROC Title()¢BYTE colpf0=53270,colpf1=53271,¢     colpf2=53273,colpf3=53273,¢     rtclock=20,vcount=54283¢  Graphics(18)¢  Position(3,4)¢  PrintD(6,"SNEAK ATTACK")¢  Position(8,5)¢  PrintD(6,"BY")¢  Position(3,7)¢  PrintD(6,"david plotkin")¢  Position(3,9)¢  PrintD(6,"ספדצצ ≤⌠β≥⌠")¢  WHILE Consol<>6 DO¢    colpf3=Fate¢    Wsync=0¢    colpf0=128-vcount+rtclock RSH 2¢    colpf1=vcount+rtclock RSH 2¢  OD¢RETURN¢¢PROC Gr0Init()¢;Set up the address of each screen¢;line and initialize¢CARD xx¢  Graphics(0)¢  CursIn=1¢  Print(" ")¢  FOR xx=0 TO 23 DO¢    Linept(xx)=Scrn+(40*xx)¢  OD¢  FOR xx=0 TO 29 DO¢    Chopperstatus(xx)=0¢    Chopperx(xx)=0¢    Choppery(xx)=0¢    Misx(xx)=0¢    Misy(xx)=0¢    MisStatus(xx)=0¢    TrStatus(xx)=0¢  OD¢  FOR xx=0 TO 59 DO¢    ExpStatus(xx)=0¢  OD¢  FOR xx=0 TO 19 DO¢    Ll(xx)=0¢    Rr(xx)=0¢  OD¢  Bkgrnd=0¢  Update()¢RETURN¢¢PROC Plot0(BYTE x,y,ch)¢;Plot a char at location x,y¢BYTE ARRAY line¢  line=Linept(y)¢  line(x)=ch¢RETURN¢¢BYTE FUNC Locate0(BYTE x,y)¢;Returns the value of the char at x,y¢BYTE ARRAY line¢  line=Linept(y)¢RETURN(line(x))¢¢PROC Noise()¢;the explosion noises¢  IF Loud=0 AND Loud1=0¢            AND Freq=169 THEN¢    RETURN¢  FI¢  IF Loud THEn¢    Loud==-2¢    Sound(0,90,8,Loud)¢  FI¢  IF Loud1 THEN¢    Loud1==-2¢    Sound(1,150,8,Loud1)¢  FI¢  IF Freq<168 THEN¢    Freq==+8¢    Sound(2,Freq,10,4)¢  ELSE¢    Freq=169¢    Sound(2,0,0,0)¢  FI¢RETURN¢¢PROC HitChute(BYTE wh)¢;see which chute was hit by missile wh¢BYTE lp¢  FOR lp=0 TO 29 DO¢    IF Misx(wh)=Trx(lp) AND¢         (Misy(wh)=Try(lp) OR¢          Misy(wh)=Try(lp)+1) THEN¢      TrStatus(lp)=2¢      Plot0(trx(lp),Try(lp),0)¢      Plot0(Trx(lp),Try(lp)+1,10)¢      Plot0(Trx(lp),Try(lp)+2,0)¢      EXIT¢    FI¢  OD¢  IF Try(lp) LSH 3 < Freq THEN¢    Freq=Try(lp) LSH 3¢  FI¢RETURN¢¢PROC HitMan(BYTE wh)¢;see which man was hit by missile wh¢BYTE lp¢  FOR lp=0 TO 29 DO¢    IF Misx(wh)=Trx(lp) AND¢         (Misy(wh)=Try(lp)+1 OR¢          Misy(wh)=Try(lp)+2) THEN¢      TrStatus(lp)=3¢      Plot0(Trx(lp),Try(lp)+1,6)¢      Plot0(Trx(lp),Try(lp),0)¢      Plot0(Trx(lp),Try(lp)+2,0)¢    FI¢  OD¢  Loud1=12¢RETURN¢¢PROC ExplodeChopper(BYTE lp)¢;explosions in place of Chopper lp¢BYTE lq¢  FOR lq=0 TO 59 STEP 2 DO ;find empty¢    IF ExpStatus(lq)=0 THEN¢      ExpStatus(lq)=1     ¢      ExpStatus(lq+1)=1¢      Expx(lq)=Chopperx(lp)¢      Expx(lq+1)=Chopperx(lp)+1¢      Expy(lq)=Choppery(lp)¢      Expy(lq+1)=Choppery(lp)¢      Chopperstatus(lp)=0¢      Plot0(Expx(lq),Expy(lq),6)¢      Plot0(Expx(lq+1),Expy(lq+1),6)¢      EXIT¢    FI¢  OD¢RETURN¢¢PROC HitChopper(BYTE wh)¢;which chopper was hit by missile wh¢BYTE lp¢  FOR lp=0 TO 29 DO¢    IF Misy(wh)=Choppery(lp) AND¢       (Misx(wh)=Chopperx(lp) OR¢        Misx(wh)=Chopperx(lp)+1) THEN¢      ExplodeChopper(lp)¢      EXIT¢    FI¢  OD¢  Loud=12¢RETURN¢¢PROC MissileHit(BYTE wh)¢;see if missile wh hit anything¢BYTE dum¢  dum=Locate0(Misx(wh),Misy(wh))¢  IF dum=0 THEN¢    Plot0(Misx(wh),Misy(wh),84)¢    RETURN¢  FI¢  MisStatus(wh)=0¢  IF dum=1 OR dum=2 THEN¢    HitChopper(wh)¢    Score==+1¢  ELSEIF (dum=7 AND Indx<6 OR¢          dum=8 AND Indx>3) THEN¢    HitChute(wh)¢    Score==+2¢  ELSEIF (dum=8 AND Indx<4 OR¢          dum=9 AND Indx>1) THEN¢    HitMan(wh)¢    Score==+1¢  FI¢RETURN¢¢PROC Modify()¢;Modify the RAM character set¢CARD xx¢  FOR xx=0 TO 103 DO¢    Charset(xx+8)=ShapeTable(xx)¢  OD¢RETURN¢¢PROC LaunchTrooper(BYTE wh)¢;drop a paratrooper from chopper wh¢BYTE lp¢  IF Fate>240-(Level LSH 1) THEN¢    FOR lp=0 TO 29 DO ;find MT trooper¢      IF TrStatus(lp)=0 THEN ;got one¢        TrStatus(lp)=1¢        Trx(lp)=Chopperx(wh)¢        IF Trx(lp)=0 THEN¢          Trx(lp)=1¢        FI¢        Try(lp)=Choppery(wh)+1¢        Plot0(Trx(lp),Try(lp),7)¢        Plot0(Trx(lp),Try(lp)+1,8)¢        Plot0(Trx(lp),Try(lp)+2,9)¢        EXIT¢      FI¢    OD¢  FI¢RETURN¢¢PROC EraseChopper(BYTE wh)¢;erase chopper number wh¢  Plot0(Chopperx(wh),Choppery(wh),0)¢  Plot0(Chopperx(wh)+1,Choppery(wh),0)¢  Chopperstatus(wh)=0¢  Chopperx(wh)=0¢  Choppery(wh)=0¢RETURN¢¢PROC DrawChopper(BYTE wh)¢;draw chopper number wh¢  Plot0(Chopperx(wh),Choppery(wh),1)¢  Plot0(Chopperx(wh)+1,Choppery(wh),2)¢RETURN¢¢PROC ClearScreen()¢;clear the screen¢BYTE lp¢  FOR lp=0 TO 29¢  DO¢    IF Chopperstatus(lp) THEN¢      EraseChopper(lp)¢    FI¢    IF TrStatus(lp) THEN¢      TrStatus(lp)=0¢      Plot0(Trx(lp),Try(lp),0)¢      Plot0(Trx(lp),Try(lp)+1,0)¢      Plot0(Trx(lp),Try(lp)+2,0)¢    FI¢    IF MisStatus(lp)=1 THEN¢      MisStatus(lp)=0¢      Plot0(Misx(lp),Misy(lp),0)¢    FI¢  OD¢  FOR lp=0 TO 59 STEP 2 DO¢    IF ExpStatus(lp)=1 THEN¢      ExpStatus(lp)=0¢      ExpStatus(lp+1)=0¢      Plot0(Expx(lp),Expy(lp),0)¢      Plot0(Expx(lp+1),Expy(lp+1),0)¢    FI¢  OD¢RETURN¢¢PROC MoveChopper()¢;move the choppers¢BYTE lp,ps=[0]¢  FOR lp=0 TO 29 DO¢    IF Chopperstatus(lp)=1 THEN ;right¢      IF Chopperx(lp)=38 THEN¢        EraseChopper(lp)¢      ELSE¢        Plot0(Chopperx(lp),¢              Choppery(lp),0)¢        Chopperx(lp)==+1¢        DrawChopper(lp)¢        LaunchTrooper(lp)¢      FI¢    FI¢    IF Chopperstatus(lp)=2 THEN ;left¢      IF Chopperx(lp)=0 THEN¢        EraseChopper(lp)¢      ELSE¢        Plot0(Chopperx(lp)+1,¢              Choppery(lp),0)¢        Chopperx(lp)==-1¢        DrawChopper(lp)¢        LaunchTrooper(lp)¢      FI¢    FI¢  OD¢  IF ps=0 THEN ¢    Charset(8)=56¢    Charset(16)=28¢    ps=1¢  ELSE¢    ps=0¢    Charset(8)=254¢    Charset(16)=127¢  FI¢RETURN¢¢PROC LaunchChopper()¢;Decide whether to send off a new¢;chopper, which side, how high up¢BYTE lp¢  IF Fate>230-(Level LSH 1) THEN¢    FOR lp=0 TO 29 DO ;find MT chopper¢      IF Chopperstatus(lp)=0 THEN¢        Choppery(lp)=Rand(Hard)¢        IF Fate>128 THEN¢          Chopperx(lp)=38 ;right side¢          Chopperstatus(lp)=2¢        ELSE¢          Chopperx(lp)=0 ;left side¢          Chopperstatus(lp)=1¢        FI¢        DrawChopper(lp)¢        EXIT¢      FI¢    OD¢  FI¢RETURN¢¢PROC DrawBase()¢;draw the base¢BYTE lp¢  FOR lp=19 TO 21 DO¢    Plot0(lp,22,128)¢  OD¢  Plot0(20,21,4)¢RETURN¢¢PROC AimGun()¢;read the joystick and move the base¢  IF Stick=11 THEN¢    Ps=3¢  ELSEIF Stick=7 THEN¢    Ps=5¢  ELSE¢    Ps=4¢  FI¢  Plot0(20,21,Ps)¢RETURN¢¢PROC Shoot()¢;send off a bullet¢BYTE trig=644,lp,flg=[0]¢  IF trig=1 OR flg=0 THEN¢    flg=1¢    RETURN¢  FI¢  FOR lp=0 TO 29 DO ;find empty shot¢    IF MisStatus(lp)=0 THEN ;got one¢      MisStatus(lp)=1